package com.javenwong.android.engine.script;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;

import com.javenwong.android.engine.GameActivity;

/**
 * 脚本对象
 * 
 * @author 王晓锋
 * @version 1.00
 * @date 2011-09-05
 */
public class Script {

	/** 物品数组 */
	public Goods[] goods;

	/** 商店数组 */
	public Shop[] shops;

	/** 任务数组 */
	public Task[] tasks;

	/** NPC数组 */
	public NPC[] npcs;

	/** 对话 数组 */
	public Dialogues[] dialoguess;

	/**
	 * 构造方法
	 * 
	 * @param id
	 *            脚本 短文件名
	 */
	public Script(String id) {
		loadScript(id);
	}

	/**
	 * 加载脚本 示例
	 * 
	 * @param id
	 */
	private final void loadScript(String id) {
		InputStream in = null;
		DataInputStream dis = null;
		try {
			// in = getClass().getResourceAsStream("/script/"+ id + ".s");
			in = GameActivity.assetManager.open("script/" + id + ".s");
			dis = new DataInputStream(in);

			// 物品
			byte count = dis.readByte(); // 物品总数

			// 初始化物品数组
			goods = new Goods[count];

			for (byte i = 0; i < count; i++) {
				Goods goods = new Goods(); // 物品

				goods.id = dis.readByte(); // 物品id
				goods.name = dis.readUTF(); // 物品名称
				goods.type = dis.readByte(); // 物品类型 参见物品类型声明
				goods.position = dis.readByte(); // 装备位置 参见物品可装备位置声明
				goods.price = dis.readShort(); // 价格
				goods.level = dis.readByte(); // 物品等级
				goods.desc = dis.readUTF(); // 物品描述

				goods.attack = dis.readShort(); // 攻击力
				goods.attackTime = dis.readShort(); // 攻击力持续时间
				goods.defence = dis.readShort(); // 防御力
				goods.defenceTime = dis.readShort(); // 防御力持续时间
				goods.thump = dis.readShort(); // 重击率
				goods.thumpTime = dis.readShort(); // 重击率持续时间
				goods.addhp = dis.readShort(); // 加生命
				goods.addhpTime = dis.readShort(); // 加生命持续时间
				goods.addmp = dis.readShort(); // 加魔法
				goods.addmpTime = dis.readShort(); // 加魔法持续时间
				goods.sidestep = dis.readShort(); // 闪避率
				goods.sidestepTime = dis.readShort(); // 闪避率持续时间

				this.goods[i] = goods;
			}

			// 商店
			count = dis.readByte(); // 商店总数

			// 创建商店数组
			shops = new Shop[count];

			for (byte i = 0; i < count; i++) {
				Shop shop = new Shop();

				shop.id = dis.readByte(); // 商店id
				shop.name = dis.readUTF(); // 商店名称

				byte c = dis.readByte(); // 商店中物品个数
				for (byte j = 0; j < c; j++) {
					shop.goods.addElement(getGoodsById(dis.readByte())); // 向商店
																			// 添加
																			// 物品对象
				}

				shops[i] = shop;
			}

			// ////// 任务 ////////////
			count = dis.readByte();

			tasks = new Task[count];

			for (byte i = 0; i < count; i++) {
				Task task = new Task();

				task.id = dis.readByte();
				task.name = dis.readUTF();
				task.type = dis.readByte();
				task.level = dis.readByte();
				task.targetId = dis.readByte();
				task.targetCount = dis.readByte();
				task.desc = dis.readUTF();
				task.exp = dis.readShort();
				task.money = dis.readShort();

				byte c = dis.readByte();
				task.encouGoods = new EncouGoods[c];
				for (byte j = 0; j < c; j++) {
					EncouGoods eg = new EncouGoods();
					eg.goods = getGoodsById(dis.readByte());
					eg.count = dis.readByte();

					task.encouGoods[j] = eg;
				}

				tasks[i] = task;

			}

			// //////// NPC ////////
			// count =dis.readByte();
			//			
			// npcs = new NPC[count];
			//			
			// for(byte i=0;i<count;i++){
			// NPC npc = new NPC();
			// npc.id = dis.readByte();
			// npc.name = dis.readUTF();
			//				
			// npcs[i] = npc;
			// }
			//			
			// //////// 对话 ////////////
			// count = dis.readByte();
			// dialoguess = new Dialogues[count];
			// for(byte i=0;i<count;i++){
			// Dialogues ds = Dialogues.read(dis, this);
			//				
			// dialoguess[i] = ds;
			// }

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				in.close();
			} catch (IOException e) {
			}
		}
	}

	/**
	 * 以物品id获取 物品对象
	 * 
	 * @param id
	 * @return
	 */
	public Goods getGoodsById(byte id) {
		for (byte i = 0; i < goods.length; i++) {
			if (goods[i].id == id) {
				return goods[i];
			}
		}
		return null;
	}

	/**
	 * 以商店id获取 商店对象
	 * 
	 * @param id
	 * @return
	 */
	public Shop getShopById(byte id) {
		for (byte i = 0; i < shops.length; i++) {
			if (shops[i].id == id) {
				return shops[i];
			}
		}
		return null;
	}

	/**
	 * 以任务id获取 任务对象
	 * 
	 * @param id
	 * @return
	 */
	public Task getTaskById(byte id) {
		for (byte i = 0; i < tasks.length; i++) {
			if (tasks[i].id == id) {
				return tasks[i];
			}
		}
		return null;
	}

	/**
	 * 以npc id获取 npc对象
	 * 
	 * @param id
	 * @return
	 */
	public NPC getNpcById(byte id) {
		for (byte i = 0; i < npcs.length; i++) {
			if (npcs[i].id == id) {
				return npcs[i];
			}
		}
		return null;
	}

	/**
	 * 以对话 id获取 对话对象
	 * 
	 * @param id
	 * @return
	 */
	public Dialogues getDialoguesById(byte id) {
		for (byte i = 0; i < dialoguess.length; i++) {
			if (dialoguess[i].id == id) {
				return dialoguess[i];
			}
		}
		return null;
	}
}
